#ifndef IMAGEVIEW_H
#define IMAGEVIEW_H

#include <QPainter>
#include <QObject>
#include <QWidget>
#include <QPixmap>
#include <QPaintEvent>
#include <QPropertyAnimation>
#include <QPen>
#include <QMouseEvent>
#include <QPointF>
/**
 * 自定义图片绘画
 * @brief The ImageView class
 */
class ImageView : public QWidget
{
    Q_OBJECT
public:
    explicit ImageView(QWidget *parent = nullptr);
    /**
     * 每次刷新用于重新绘制画面
     * @brief paintEvent
     * @param e
     */
    void paintEvent(QPaintEvent *e);
    /**
     * 鼠标拖动绘制矩形和圆形
     * @brief mouseMoveEvent
     * @param ev
     */
    void mouseMoveEvent(QMouseEvent *ev);
    /**
     * 鼠标按下左键开始绘制
     * @brief mousePressEvent
     * @param ev
     */
    void mousePressEvent(QMouseEvent *ev);
    /**
     * 鼠标被释放停止绘制
     * @brief mouseReleaseEvent
     * @param ev
     */
    void mouseReleaseEvent(QMouseEvent *ev);
    /**
     * 坐标转换函数
     * @brief convertPoint
     * @param p
     * @return
     */
    QPointF convertPoint(const QPoint& p);
signals:
    /**
     * 发送当前鼠标点的RGB值
     * @brief colorHovered
     * @param color
     */
    void colorHovered(QColor color);
public slots:
    /**打开文件
     * @brief openFile
     */
    void openFile();
    /**
     * 拖过界面的QSlider发送的信号，实现图片旋转
     * @brief turnImage
     * @param v
     */
    void turnImage(int v);
    /**
     * 图片缩放
     * @brief scaleImage
     * @param v
     */
    void scaleImage(int v);
    /**
     * 图片平移
     * @brief moveAnimation
     */
    void moveAnimation();
    /**
     * 绘制矩形
     * @brief drawRect
     */
    void drawRect();
    /**
     * 绘制圆形
     * @brief drawEllipse
     */
    void drawEllipse();
protected:
    QPixmap src; //打开的图片文件
    /**
     *
     * x1,x2记录鼠标点击的坐标
     * x2,y2记录鼠标拖动的坐标
     * @brief x1,x2,y1,y2
     */
    int x1=0,x2=0,y1=0,y2=0;
    int type = 0;//1绘制矩形  2绘制圆形
    int rotateValue = 1;//旋转角度
    qreal scaleValue = 1.0;//缩放比例
    bool status = false;//绘制状态
    QPropertyAnimation animation;//动画
};

#endif // IMAGEVIEW_H
